package com.express.gateway.common;

import com.express.gateway.manage.entity.TrackInfo;

/**
 * event bus 通讯地址
 * 
 * @author flower
 *
 */
public interface EventBusTopicConst {
	String sysName = "<" + System.getProperty(CommonCons.KEY_VERTX, CommonCons.KEY_VERTX_NAME) + ">";

	/**
	 * 客户端启动所有应用于API,无参数要求<br>
	 * 结果:成功ok,500失败
	 */
	String CLI_START_EVERYTHING = sysName + "cli:start:everything";
	/**
	 * 客户端启动所有APP,无参数要求<br>
	 */
	String CLI_START_ALL_APP = sysName + "cli:start:all:app";
	/**
	 * 客户端启动指定APP并同时启动所有的API,参数要求:JsonArray<br>
	 * ["网关应用的名字",...]<br>
	 * 结果:ok等于成功,其他为失败1400缺少参数,500错误
	 */
	String CLI_START_APP_EVERYTHING = sysName + "cli:start:app:everything";
	/**
	 * 客户端启动指定APP,参数要求:JsonArray<br>
	 * ["网关应用的名字",...]<br>
	 * 结果:ok等于成功,其他为失败1400缺少参数,500错误
	 */
	String CLI_START_APP = sysName + "cli:start:app";

	/**
	 * 查看系统运行情况,无需参数<br>
	 * 返回结果:500失败,其他成功
	 */
	String SYSTEM_GET_INFO = sysName + "sys:get:sys:info";
	/**
	 * 添加异常信息,参数要求:JsonObject<br>
	 * [{@link TrackInfo} to JsonObject
	 * 选填]<br>
	 * 没有返回结果
	 */
	String SYSTEM_PLUS_ERROR = sysName + "sys:plus:error";
	/**
	 * 添加API追踪信息记录,参数要求:<br>
	 * [{@link TrackInfo} to JsonObject
	 * 选填]<br>
	 * 没有返回结果
	 */
	String SYSTEM_PLUS_TRACK_INFO = sysName + "sys:plus:track:info";
	/**
	 * 查看API追踪信息记录,参数要求:JsonObject<br>
	 * [必填 ] appName 网关名字 , [必填 ] apiName API的名
	 */
	String SYSTEM_GET_TRACK_INFO = sysName + "sys:get:track:info";
	/**
	 * 更新IP地址,无需参数<br>
	 * 没有返回结果
	 */
	String SYSTEM_PUBLISH_BLACK_IP_LIST = sysName + "publish:update:black:ip:list";

	/**
	 * 查看黑名单ip地址,与SysVerticle交互,无需参数<br>
	 * 返回结果:失败500,其他成功
	 */
	String SYSTEM_BLACK_IP_FIND = sysName + "sys:find:black:ip";
	/**
	 * 更新黑名单ip地址,与SysVerticle交互,参数要求:JsonObject<br>
	 * [JsonArray 必填 ]ipList<br>
	 * 返回结果:失败:500,1400,1405,其他为成功
	 */
	String SYSTEM_BLACK_IP_REPLACE = sysName + "sys:replace:Black:ip";
	/**
	 * 添加请求到达EXP的数量,无需参数,无返回
	 */
	String SYSTEM_PLUS_EXP_REQUEST = sysName + "sys:request:api:count:plus";
	/**
	 * 添加请求到达到达核心处理器(HTTP/HTTPS)的数量,无需参数,无返回
	 */
	String SYSTEM_PLUS_HTTP_API_REQUEST = sysName + "sys:request:http:api:count:AndProcessingPlus";
	/**
	 * 减少核心处理器(HTTP/HTTPS)当前正在处理的数量,无需参数,无返回
	 */
	String SYSTEM_MINUS_CURRENT_PROCESSING = sysName + "sys:current:http:api:ProcessingCountMinus";

	/**
	 * 获取应用网关的数量,无需参数<br>
	 * 返回结果:JsonObject:app:网关应用的数量,api:API的数量
	 */
	String DEPLOY_APP_COUNT = sysName + "deploy:application:count";
	/**
	 * 部署应用程序,参数要求:JsonObject<br>
	 * [必填 ]appName网关名字,[JsonObject 必填 ]app网关配置信息<br>
	 * 结果:成功reply=ok,其他为失败
	 */
	String DEPLOY_APP_DEPLOY = sysName + "deploy:deploy:application";
	/**
	 * 卸载应用程序应用程序,参数要求:JsonObject<br>
	 * [必填 ]appName网关名字 , [选填 ]thisVertxName 集群环境时当前应用名字<br>
	 * 结果:ok成功,其他失败
	 */
	String DEPLOY_APP_UNDEPLOY = sysName + "deploy:undeploy:application";

	/**
	 * 启动一个应用中的所有API,需要参数:JsonObject<br>
	 * [必填 ]appName , [JsonArray 必填 ] apis<br>
	 * 结果:JsonObject
	 */
	String DEPLOY_API_START_ALL = sysName + "deploy:start:all:api";

	/**
	 * 启动API,需要参数:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * [必填] thisVertxName 集群环境时当前应用名字, <br>
	 * [JsonObject 必填] api API信息, <br>
	 * 结果:1成功,其他失败:0,500
	 */
	String DEPLOY_API_START = sysName + "deploy:start:api";
	/**
	 * 暂停API,需要参数:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * [必填] thisVertxName 集群环境时当前应用名字, <br>
	 * 结果:1成功,其他失败:500
	 */
	String DEPLOY_API_STOP = sysName + "deploy:stop:api";

	/**
	 * 获得已部署的应用程序,无需参数<br>
	 * 结果:JsonArray
	 */
	String DEPLOY_FIND_ONLINE_APP = sysName + "deploy:find:online:app";
	/**
	 * 查看APP是否已经部署,参数要求:String<br>
	 * 结果:Boolean
	 */
	String DEPLOY_APP_IS_ONLINE = sysName + "deploy:get:pp:is_online";
	/**
	 * 获得已部署的API,参数要求:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * 结果:JsonArray
	 */
	String DEPLOY_FIND_ONLINE_API = sysName + "deploy:find:online:api";
	/**
	 * 查看API是否已经启动,参数要求:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * 结果:Boolean
	 */
	String DEPLOY_API_IS_ONLINE = sysName + "deploy:get:apiIsOnline";

	/**
	 * 应用程序添加API的后缀,参数要求,JsonObject<br>
	 * [JsonObject 必填] api API的配置信息<br>
	 * [Boolean 选填] elseRouteToThis 是否代理启动API, <br>
	 * [Integer 选填] serverType 服务的类型1=HTTP,2=HTTPS,3=webSocket <br>
	 * 结果:成功=1,其他失败404,500,1400
	 */
	String APPLICATION_ADD_API_SUFFIX = sysName + "/:addRoute";

	/**
	 * 应用程序删除API的后缀,参数要求,必填 API的名字<br>
	 * 结果:成功=1,其他失败1400
	 */
	String APPLICATION_DEL_API_SUFFIX = sysName + "/:delRoute";

	/**
	 * 查看所有APP,无需参数
	 */
	String FIND_APP = sysName + "data:find:application";
	/**
	 * 查看单个APP,参数要求:String
	 */
	String GET_APP = sysName + "data:get:application";
	/**
	 * 添加APP,参数要求:JsonObject<br>
	 * [必填 ]appName 应用的名称, [JsonObject 必填] app 应用的属性<br>
	 * 返回结果:成功受影响行数,失败返回411,500
	 */
	String ADD_APP = sysName + "data:add:application";
	/**
	 * 删除APP,参数要求:String<br>
	 * 结果:成功受影响行数,失败返回411,500
	 */
	String DEL_APP = sysName + "data:del:application";
	/**
	 * 更新APP,参数要求:JsonObject<br>
	 * [必填 ]appName 应用的名称, [JsonObject 必填] app 应用的属性<br>
	 * 返回结果:成功受影响行数,失败返回411,500
	 */
	String UPD_APP = sysName + "data:upd:application";

	/**
	 * 查询所有API,需要参数:JsonObject<br>
	 * [必填 ] appName<br>
	 * 结果:失败返回411,500
	 */
	String FIND_API_ALL = sysName + "data:find:all:api";

	/**
	 * 查询API通过分页的方式,参数要求:JsonObject<br>
	 * [必填 ]appName 应用的名称, <br>
	 * [Integer 选填 ]limit 分页limit, <br>
	 * [Integer 选填 ]offset 分页offset<br>
	 * 结果:失败返回411,500
	 */
	String FIND_API_BY_PAGE = sysName + "data:find:api:by_page";
	/**
	 * 查询单个API,参数要求:String<br>
	 * 结果:成功受影响行数,失败返回411,500
	 */
	String GET_API = sysName + "data:get:api";
	/**
	 * 添加API,参数要求:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * [JsonObject 必填] api API信息, <br>
	 * 结果:成功受影响行数,失败返回411,500
	 */
	String ADD_API = sysName + "data:add:api";
	/**
	 * 删除API,参数要求:JsonObject<br>
	 * [必填] appName 网关名字, <br>
	 * [必填] apiName API名字, <br>
	 * 结果:成功受影响行数,失败返回411,500
	 */
	String DEL_API = sysName + "data:del:api";
	/**
	 * 更新API,参数要求:JsonObject<br>
	 * [必填] apiName API名字, <br>
	 * [JsonObject 必填] api API信息, <br>
	 * 结果:成功受影响行数,失败返回411,500
	 */
	String UPD_API = sysName + "data:upd:api";
	/**
	 * 更新黑名单列表,与DATAVerticle交互,无需参数
	 */
	String FIND_BLACKLIST = sysName + "data:find:blacklist";
	/**
	 * 更新黑名单列表,与DATAVerticle交互,参数要求:JsonObject<br>
	 * [必填] blacklistName 黑名单的名字, <br>
	 * [JsonArray 必填] blacklistBody 黑名单的内容, <br>
	 * 结果:成功受影响行数,失败返回500
	 */
	String REPLACE_BLACKLIST = sysName + "data:upd:blacklist";
}
